<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function Animal (name, age) {
            this.name = name
            this.age = age
        }
        Animal.prototype.walk = function () {
            console.log(`${this.name} is walking`)
        }
        var cat = new Animal('Tom', 30)
        cat.walk()

        console.log(cat)

        //在实例对象身上有一个__proto__属性,这个属性指向的是构建函数的prototype
        console.log(cat.__proto__ === Animal.prototype) //true
        
        console.log(Animal.prototype.constructor === Animal) //true 原型链示意图上有标明

        //Animal.prototype是在封装Animal是就自动创建的
        // 所以其实他就是一个普通对象，可以理解为 Animal.prototype = new Object()
        // 所以作为普通对象，他的 __proto__ 指向他的构造函数也就是Object.prototype
        console.log(Animal.prototype.__proto__ === Object.prototype) // true
        
        // Object是所有对象的顶级，所以再往上没有了
        console.log(Object.prototype.__proto__) // null

 </script>
</body>
</html>